#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Read and Merge
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
wd <- "E:/Cinetic idei noi/EXPERIMENTE OGL Frontiers (O.2 & O.0.3 & O.0.2)"
setwd(wd)
DataTrust <- rio::import(file.path(wd, "O.2 REZULTATE\\O.2 Date PrelucrareSPSS cu NEO si STAI", "O.2 Date pt Trust BUN cu NEO si STAIY.xlsx"))
DataDG <- rio::import(file.path(wd, "O.2 REZULTATE\\O.2 Date PrelucrareSPSS cu NEO si STAI", "O.2 Date pt DG BUN cu NEO si STAIY.xlsx"))
DataVAS <- rio::import(file.path(wd, "O.2 REZULTATE\\O.2 VAS,IOS", "O.2 Date PrelucrareSPSS.xlsx"))
DataBIO <- rio::import(file.path(wd, "O.2 BIO", "O.2 Ox si Cortizol.xlsx"))
Data_merge1 <- merge(DataVAS, DataTrust)
Data_merge2 <- merge(Data_merge1, DataDG)
Data_merge3 <- merge(Data_merge2, DataBIO)
Data <- Data_merge3
test_names <- unique(unlist(lapply(list(DataTrust, DataDG, DataVAS, DataBIO), names)))
merge_names <- names(Data)
if(identical(merge_names[order(merge_names)], test_names[order(test_names)])){ # the order matters in identical()
cat("**Merge was succesful**")
rm("Data_merge1", "Data_merge2", "Data_merge3", "DataBIO", "DataDG", "DataTrust", "DataVAS", "test_names", "merge_names")
}else cat("**Merge unsuccesful**")
Merge was succesful
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Derive new variables
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Data$D_VasS_Poz <- Data[, "VasS_postPoz"] - Data[, "VasS_prePoz"]
Data$D_VasS_Neg <- Data[, "VasS_postNeg"] - Data[, "VasS_preNeg"]
Data$D_VasB_Poz <- Data[, "VasB_postPoz"] - Data[, "VasB_prePoz"]
Data$D_VasB_Neg <- Data[, "VasB_postNeg"] - Data[, "VasB_preNeg"]
Data$D_IOS_Poz <- Data[, "IOS_postPoz"] - Data[, "IOS_prePoz"]
Data$D_IOS_Neg <- Data[, "IOS_postNeg"] - Data[, "IOS_preNeg"]
Data$D_Sam1_Poz <- Data[, "Sam1_postPoz"] - Data[, "Sam1_prePoz"]
Data$D_Sam1_Neg <- Data[, "Sam1_postNeg"] - Data[, "Sam1_preNeg"]
Data$D_Sam2_Poz <- Data[, "Sam2_postPoz"] - Data[, "Sam2_prePoz"]
Data$D_Sam2_Neg <- Data[, "Sam2_postNeg"] - Data[, "Sam2_preNeg"]
Data$D_Sam3_Poz <- Data[, "Sam3_postPoz"] - Data[, "Sam3_prePoz"]
Data$D_Sam3_Neg <- Data[, "Sam3_postNeg"] - Data[, "Sam3_preNeg"]
Data$D_DG_Poz <- Data[, "DG_postPozTot"] - Data[, "DG_prePozTot"]
Data$D_DG_Neg <- Data[, "DG_postNegTot"] - Data[, "DG_preNegTot"]
Data$D_TrustMin_Poz <- Data[, "TrustMinPozPost"] - Data[, "TrustMinPozPre"]
Data$D_TrustMin_Neg <- Data[, "TrustMinNegPost"] - Data[, "TrustMinNegPre"]
Data$D_TrustTot_Poz <- Data[, "TrustTotPozPost"] - Data[, "TrustTotPozPre"]
Data$D_TrustTot_Neg <- Data[, "TrustTotNegPost"] - Data[, "TrustTotNegPre"]
Data$D_Cort_Poz <- Data[, "Cort_post_Poz"] - Data[, "Cort_pre_Poz"]
Data$D_Cort_Neg <- Data[, "Cort_post_Neg"] - Data[, "Cort_pre_Neg"]
Data$D_Ox_Poz <- Data[, "Ox_post_Poz"] - Data[, "Ox_pre_Poz"]
Data$D_Ox_Neg <- Data[, "Ox_post_Neg"] - Data[, "Ox_pre_Neg"]
find_med <- function(df, dfp = NULL, num_only = TRUE, verbose = TRUE) {
count = 0
mediation_model_list <<- list()
if(num_only == TRUE){
numeric_cols <- unlist(lapply(df, is.numeric)) # get only numeric columns
df <- df[, numeric_cols]
}
# permutations for Mediation - Check: factorial(len_names)/factorial(len_names-3)
names <- colnames(df)
len_names = length(names)
if(is.null(dfp)){
dfp <- lapply(1:len_names, function(i){
tmp <- lapply(1:len_names, function(j){
tmp <- lapply(1:len_names, function(k){
if(j != i & k != i & k != j) c(names[i], names[j], names[k])
})
do.call(rbind, tmp)
})
do.call(rbind, tmp)
})
dfp <- do.call(rbind.data.frame, dfp)
names(dfp) <- paste("var", 1:3, sep = "_")
dfp[, ] <- lapply(dfp[, ], as.character)
} else {
dfp <- dfp
}
for (row in 1:nrow(dfp)) {
results <- medmod::med(data = df,
dep = dfp[row, 1], med = dfp[row, 2], pred = dfp[row, 3],
ci = TRUE, label = TRUE,
paths = TRUE, pm = TRUE,
estPlot = FALSE)
pmed <- as.data.frame(results$med)[1, 8] # p-value of Indirect Effect
if(pmed < 0.05 && !is.na(pmed)) {
count <- count + 1
if(verbose == TRUE) {
cat("Mediator Variable:", dfp[row, 2], "| Predictor:", dfp[row, 3], "| Dependent:", dfp[row, 1])
print(results$med)
print(results$paths)
}
mediation_model_list[["MedEs"]][[paste("model", count, sep = "_")]] <<- as.data.frame(results$med) # return as list of dataframes
mediation_model_list[["PathEs"]][[paste("model", count, sep = "_")]] <<- as.data.frame(results$paths)
mediation_model_list[["Syntax"]][[paste("model", count, sep = "_")]] <<- results$modelSyntax
}
}
cat("\n","Report: ", count, "significant mediations out of", row, "total tries.")
}
find_mod <- function(df, dfp = NULL, num_only = TRUE, verbose = TRUE) {
count = 0
moderation_model_list <<- list()
if(num_only == TRUE){
numeric_cols <- unlist(lapply(df, is.numeric)) # get only numeric columns
df <- df[, numeric_cols]
}
# restricted permutations for Moderation - Check: choose(len_names, 3)*3
names <- colnames(df)
len_names = length(names)
if(is.null(dfp)){
dfp <- lapply(1:len_names, function(i){
tmp <- lapply(1:(len_names-1), function(j){
tmp <- lapply((j+1):len_names, function(k){
if(j != i & k != i) c(names[i], names[j], names[k])
})
do.call(rbind, tmp)
})
do.call(rbind, tmp)
})
dfp <- do.call(rbind.data.frame, dfp)
names(dfp) <- paste("var", 1:3, sep = "_")
dfp[, ] <- lapply(dfp[, ], as.character)
} else {
dfp <- dfp
}
for (row in 1:nrow(dfp)) {
results <- medmod::mod(data = df, # mod does centering automatically
dep = dfp[row, 1], mod = dfp[row, 2], pred = dfp[row, 3],
estMethod = "standard", test = TRUE,
simpleSlopeEst = FALSE, simpleSlopePlot = FALSE) # when testing use estMethod = 'bootstrap', bootstrap = 500
pmod <- as.data.frame(results$mod)[3,5]
if(pmod < 0.05 && !is.na(pmod)) {
count <- count + 1
if(verbose == TRUE) {
cat("Dependent Variable:", dfp[row, 1])
print(results$mod)
}
moderation_model_list[["Model"]][[paste("model", count, sep = "_")]] <<- as.data.frame(results$mod) # return as list of dataframes
moderation_model_list[["Syntax"]][[paste("model", count, sep = "_")]] <<- results$modelSyntax
}
}
cat("\n","Report: ", count, "significant moderations out of", row, "total tries.")
}
#######################################################################################################################################
## LCS ANCOVA mediation function (adapted for lavaan from doi: 10.1080/10705511.2016.1274657)
#######################################################################################################################################
library(lavaan)
library(semPlot)
lcs_ancova_med <- function(df, x, y1, y2, m1, m2){
arguments <- as.list(match.call())
x = eval(arguments$x, df)
y1 = eval(arguments$y1, df)
y2 = eval(arguments$y2, df)
m1 = eval(arguments$m1, df)
m2 = eval(arguments$m2, df)
df_mod <- data.frame(x, y1, y2, m1, m2) # use this df creating part like this: lcs_ancova_med(mtcars, mpg, cyl, disp, hp, drat)
mod_syntax <-
'
# Defining change in M as a function of M1 and M2
deltam =~ 1*m2
deltam ~~ deltam
deltam ~ 1
m2 ~ 1*m1
m2 ~~ 0*m1
m2 ~~ 0*m2
m2 ~ 0*1
m1 ~ 1
# Defining the change in Y as a function of Y1 and Y2
deltay =~ 1*y2
deltay ~~ deltay
deltay ~ 1
y2 ~ 1*y1
y2 ~~ 0*y1
y2 ~~ 0*y2
y2 ~ 0*1
y1 ~ 1
# Estimating the Pretest correlation between M1 and Y1 and Variance of X
m1 ~~ y1
# Estimated covariance between M1 and X and Y1 and X because these covariances may not be equal to zero especially
# if X is not a randomized experiment without these the model has 2 degrees of freedom (covariances are only constrained to zero)
# but ANCOVA model should start out as saturated and have 0 degrees of freedom
m1 ~~ x # these covariances may not be equal to zero especially if X is not a randomized experiment
x ~~ y1 # these covariances may not be equal to zero especially if X is not a randomized experiment
# Regression of change in M on X and pretest measures
deltam ~ am2x*x + sm1*m1 + y1
# Regression of change in Y on X, change in M, and pretest measures
deltay ~ x + by2m2*deltam + b*m1 + sy1*y1
# Making constraints to match estimates to ANCOVA
# Estimate of effect of M1 on M2 in ANCOVA
sm := sm1+1
# Estimate of effect of Y1 on Y2 in ANCOVA
sy := sy1+1
# Estimate of effect of M1 on Y2 in ANCOVA
by2m1 := b-by2m2
# Estimate of mediated effect
med := am2x*by2m2
'
mod <- lavaan::sem(model = mod_syntax, data = df_mod, test = "bootstrap")
}
#######################################################################################################################################
# Use - dont run
#######################################################################################################################################
# mod <- lcs_ancova_med(df = df2, x = Cond, y1 = Out1, y2 = Out2, m1 = Med1, m2 = Med2)
#
# summary(mod, standardized = TRUE)
# semPlot::semPaths(mod, layout = "spring", nCharNodes = 0, nCharEdges = 0, what = "path", whatLabels = "path", edge.label.cex = 0.8)
Data %>%
select(-"Nume Prenume") %>%
DT::datatable( # excel downloadable DT table
extensions = 'Buttons',
options = list(pageLength = 10,
scrollX='500px',
dom = 'Bfrtip',
buttons = c('excel', "csv")))
Data_med <- Data %>%
select(-c(1:4,6,7),
-c("DG_prePoz1", "DG_prePoz2", "DG_prePoz3", "DG_postPoz1", "DG_postPoz2", "DG_postPoz3",
"DG_preNeg1", "DG_preNeg2", "DG_preNeg3" , "DG_postNeg1", "DG_postNeg2", "DG_postNeg3"))
## Data not melted to long
# Data_med %>%
# find_med() # not run here to keep report clean
## Data melted to long (Cond = Poz/Neg)
# Data_med_melt <-
# Data_med %>%
# dplyr::rename_all(list(~stringr::str_replace_all(., "Pre|_pre|_Pre", "_pre"))) %>% # consistent Condition and Time
# dplyr::rename_all(list(~stringr::str_replace_all(., "Post|_post|_Post", "_post"))) %>%
# dplyr::rename_all(list(~stringr::str_replace_all(., "Poz|poz|_Poz|_poz", "_poz"))) %>%
# dplyr::rename_all(list(~stringr::str_replace_all(., "Neg|neg|_Neg|_neg", "_neg"))) %>%
# dplyr::rename_all(list(~stringr::str_replace_all(., "_neg_pre", "_pre_neg"))) %>% # consistent ordering in names
# dplyr::rename_all(list(~stringr::str_replace_all(., "_neg_post", "_post_neg"))) %>%
# dplyr::rename_all(list(~stringr::str_replace_all(., "_poz_pre", "_pre_poz"))) %>%
# dplyr::rename_all(list(~stringr::str_replace_all(., "_poz_post", "_post_poz"))) %>%
# dplyr::rename_all(list(~stringr::str_replace_all(., "Tot", ""))) %>% # detele Tot "DG_pre_negTot", "TrustTot_post_poz"
# gather(Var, Val, -c(1:38)) %>%
# separate(Var, into = c("Var", "Time", "Condition")) %>%
# mutate(Time = factor(Time, levels = c("pre", "post"))) %>%
# mutate(Condition = factor(Condition, levels = c("poz", "neg"))) %>%
# spread(Var, Val)
Data_med_melt <-
Data_med %>%
dplyr::rename_all(list(~stringr::str_replace_all(., "Pre|_pre|_Pre", "_pre"))) %>% # consistent Condition and Time
dplyr::rename_all(list(~stringr::str_replace_all(., "Post|_post|_Post", "_post"))) %>%
dplyr::rename_all(list(~stringr::str_replace_all(., "Poz|poz|_Poz|_poz", "_poz"))) %>%
dplyr::rename_all(list(~stringr::str_replace_all(., "Neg|neg|_Neg|_neg", "_neg"))) %>%
dplyr::rename_all(list(~stringr::str_replace_all(., "_neg_pre", "_pre_neg"))) %>% # consistent ordering in names
dplyr::rename_all(list(~stringr::str_replace_all(., "_neg_post", "_post_neg"))) %>%
dplyr::rename_all(list(~stringr::str_replace_all(., "_poz_pre", "_pre_poz"))) %>%
dplyr::rename_all(list(~stringr::str_replace_all(., "_poz_post", "_post_poz"))) %>%
dplyr::rename_all(list(~stringr::str_replace_all(., "Tot", ""))) %>% # detele Tot "DG_pre_negTot", "TrustTot_post_poz"
gather(Var, Val, -c(1:38)) %>%
tidyr::separate(Var, into = c("Var", "Time", "Condition")) %>%
tidyr::unite("Var", c("Var", "Time")) %>%
mutate(Condition = factor(Condition, levels = c("poz", "neg"))) %>%
mutate(Condition = dplyr::recode(Condition, "poz" = 1, "neg" = 2)) %>%
spread(Var, Val)
dfp <- data.frame(
var1 = colnames(Data_med_melt)[grep("_post", colnames(Data_med_melt))],
var2 = rep("Condition", 13),
var3 = colnames(Data_med_melt)[grep("_pre", colnames(Data_med_melt))],
stringsAsFactors = FALSE
)
find_med(df = Data_med_melt, dfp = dfp, num_only = FALSE) # nothing
find_mod(df = Data_med_melt, dfp = dfp, num_only = FALSE) # DG_pre:Condition
# medmod::med(data = Data_med_melt,
# dep = "Ox_post", med = "Condition", pred = "Ox_pre",
# ci = TRUE, label = TRUE,
# paths = TRUE, pm = TRUE,
# estPlot = FALSE)
#
# medmod::mod(data = Data_med_melt, # mod does centering automatically
# dep = "Ox_post", mod = "Condition", pred = "Ox_pre",
# estMethod = "standard", test = TRUE,
# simpleSlopeEst = FALSE, simpleSlopePlot = FALSE)
# mediation_model_list$Model # no models to show
moderation_model_list$Model %>%
knitr::kable(digits = 2)
term | est | se | z | p |
---|---|---|---|---|
DG_pre | 0.64 | 0.06 | 10.50 | 0.00 |
Condition | 40.39 | 29.01 | 1.39 | 0.16 |
DG_pre:Condition | -0.36 | 0.12 | -2.92 | 0.00 |
Data_med_melt_transform <- Data_med_melt # some observed variances are (at least) a factor 1000 times larger than others
Data_med_melt_transform$DG_pre <- Data_med_melt_transform$DG_pre / 100
Data_med_melt_transform$DG_post <- Data_med_melt_transform$DG_post / 100
mod <- lcs_ancova_med(df = Data_med_melt_transform, x = Condition, y1 = DG_pre, y2 = DG_post, m1 = Ox_pre, m2 = Ox_post)
summary(mod, standardized = TRUE) # nope
lavaan 0.6-4 ended normally after 47 iterations
Optimization method NLMINB
Number of free parameters 20
Used Total
Number of observations 59 60
Estimator ML
Model Fit Test Statistic 0.000
Degrees of freedom 0
P-value (Bollen-Stine Bootstrap) 0.644
Parameter Estimates:
Information Expected
Information saturated (h1) model Structured
Standard Errors Standard
Latent Variables:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
deltam =~
m2 1.000 0.629 0.897
deltay =~
y2 1.000 1.509 0.775
Regressions:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
m2 ~
m1 1.000 1.000 0.770
y2 ~
y1 1.000 1.000 1.227
deltam ~
x (am2x) 0.023 0.158 0.144 0.885 0.036 0.018
m1 (sm1) -0.320 0.146 -2.188 0.029 -0.508 -0.274
y1 -0.036 0.033 -1.104 0.269 -0.057 -0.137
deltay ~
x 0.397 0.310 1.280 0.200 0.263 0.131
deltam (by22) 0.485 0.256 1.894 0.058 0.202 0.202
m1 (b) 0.090 0.299 0.303 0.762 0.060 0.032
y1 (sy1) -0.352 0.065 -5.427 0.000 -0.233 -0.558
Covariances:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
.m2 ~~
m1 0.000 0.000 NaN
.y2 ~~
y1 0.000 0.000 NaN
m1 ~~
y1 0.100 0.169 0.596 0.551 0.100 0.078
x -0.042 0.036 -1.175 0.240 -0.042 -0.155
y1 ~~
x 0.053 0.156 0.341 0.733 0.053 0.044
Intercepts:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
.deltam 0.790 0.359 2.204 0.028 1.256 1.256
.m2 0.000 0.000 0.000
m1 0.776 0.070 11.027 0.000 0.776 1.436
.deltay 2.190 0.734 2.983 0.003 1.451 1.451
.y2 0.000 0.000 0.000
y1 7.229 0.311 23.227 0.000 7.229 3.024
x 1.508 0.065 23.177 0.000 1.508 3.017
Variances:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
.deltam 0.356 0.066 5.431 0.000 0.898 0.898
.m2 0.000 0.000 0.000
.deltay 1.379 0.254 5.431 0.000 0.605 0.605
.y2 0.000 0.000 0.000
m1 0.292 0.054 5.431 0.000 0.292 1.000
y1 5.715 1.052 5.431 0.000 5.715 1.000
x 0.250 0.046 5.431 0.000 0.250 1.000
Defined Parameters:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
sm 0.680 0.146 4.661 0.000 0.492 0.726
sy 0.648 0.065 9.976 0.000 0.767 0.442
by2m1 -0.395 0.336 -1.175 0.240 -0.142 -0.170
med 0.011 0.077 0.144 0.886 0.007 0.004
semPlot::semPaths(mod, layout = "spring", nCharNodes = 0, nCharEdges = 0, what = "path", whatLabels = "path", edge.label.cex = 0.8)
# mod <- lcs_ancova_med(df = Data_med_melt, x = Condition, y1 = VasS_pre, y2 = VasS_post, m1 = Ox_pre, m2 = Ox_post)
# summary(mod, standardized = TRUE) # nope
#
# mod <- lcs_ancova_med(df = Data_med_melt, x = Condition, y1 = VasB_pre, y2 = VasB_post, m1 = Ox_pre, m2 = Ox_post)
# summary(mod, standardized = TRUE) # nope
#
# mod <- lcs_ancova_med(df = Data_med_melt, x = Condition, y1 = IOS_pre, y2 = IOS_post, m1 = Ox_pre, m2 = Ox_post)
# summary(mod, standardized = TRUE) # nope
#
# mod <- lcs_ancova_med(df = Data_med_melt, x = Condition, y1 = Trust_pre, y2 = Trust_post, m1 = Ox_pre, m2 = Ox_post)
# summary(mod, standardized = TRUE) # nope
#
#
#
# mod <- lcs_ancova_med(df = Data_med_melt, x = Condition, y1 = Ox_pre, y2 = Ox_post, m1 = IOS_pre, m2 = IOS_post)
# summary(mod, standardized = TRUE) # nope
#
# mod <- lcs_ancova_med(df = Data_med_melt, x = Condition, y1 = Ox_pre, y2 = Ox_post, m1 = VasS_pre, m2 = VasS_post)
# summary(mod, standardized = TRUE) # nope
#
# mod <- lcs_ancova_med(df = Data_med_melt, x = Condition, y1 = Ox_pre, y2 = Ox_post, m1 = VasB_pre, m2 = VasB_post)
# summary(mod, standardized = TRUE) # nope
#
#
#
# mod <- lcs_ancova_med(df = Data_med_melt, x = Condition, y1 = Cort_pre, y2 = Cort_post, m1 = IOS_pre, m2 = IOS_post)
# summary(mod, standardized = TRUE) # nope
#
# mod <- lcs_ancova_med(df = Data_med_melt, x = Condition, y1 = Cort_pre, y2 = Cort_post, m1 = VasS_pre, m2 = VasS_post)
# summary(mod, standardized = TRUE) # nope
#
# mod <- lcs_ancova_med(df = Data_med_melt, x = Condition, y1 = Cort_pre, y2 = Cort_post, m1 = VasB_pre, m2 = VasB_post)
# summary(mod, standardized = TRUE) # nope
R version 3.5.2 (2018-12-20)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=Romanian_Romania.1250 LC_CTYPE=Romanian_Romania.1250 LC_MONETARY=Romanian_Romania.1250 LC_NUMERIC=C
[5] LC_TIME=Romanian_Romania.1250
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] semPlot_1.1 lavaan_0.6-4 rio_0.5.16 plyr_1.8.4 summarytools_0.9.3 DT_0.5 ggpubr_0.2
[8] magrittr_1.5 broom_0.5.1 papaja_0.1.0.9842 psych_1.8.10 forcats_0.3.0 stringr_1.3.1 dplyr_0.7.8
[15] purrr_0.2.5 readr_1.3.0 tidyr_0.8.2 tibble_1.4.2 ggplot2_3.2.0 tidyverse_1.2.1 pacman_0.5.1
loaded via a namespace (and not attached):
[1] readxl_1.1.0 backports_1.1.3 Hmisc_4.1-1 BDgraph_2.53 igraph_1.2.4.1 lazyeval_0.2.1
[7] splines_3.5.2 crosstalk_1.0.0 pryr_0.1.4 digest_0.6.18 htmltools_0.3.6 matrixcalc_1.0-3
[13] magick_2.0 checkmate_1.8.5 lisrelToR_0.1.4 cluster_2.0.7-1 openxlsx_4.1.0 sna_2.4
[19] modelr_0.1.2 matrixStats_0.54.0 jpeg_0.1-8 sem_3.1-9 colorspace_1.3-2 rvest_0.3.2
[25] haven_2.1.1 xfun_0.8 tcltk_3.5.2 crayon_1.3.4 RCurl_1.95-4.11 jsonlite_1.6
[31] lme4_1.1-19 bindr_0.1.1 survival_2.43-3 glue_1.3.1 gtable_0.2.0 mi_1.0
[37] medmod_1.0.0 ggm_2.3 abind_1.4-5 rapportools_1.0 scales_1.0.0 Rcpp_1.0.2
[43] xtable_1.8-3 htmlTable_1.12 foreign_0.8-71 Formula_1.2-3 stats4_3.5.2 htmlwidgets_1.3
[49] httr_1.4.0 RColorBrewer_1.1-2 acepack_1.4.1 pkgconfig_2.0.2 XML_3.98-1.16 nnet_7.3-12
[55] kutils_1.69 later_0.7.5 tidyselect_0.2.5 rlang_0.3.0.1 reshape2_1.4.3 munsell_0.5.0
[61] cellranger_1.1.0 tools_3.5.2 jmvcore_0.9.5.2 cli_1.0.1 generics_0.0.2 statnet.common_4.1.4
[67] evaluate_0.14 fdrtool_1.2.15 arm_1.10-1 yaml_2.2.0 knitr_1.24 zip_1.0.0
[73] pander_0.6.3 bindrcpp_0.2.2 glasso_1.10 pbapply_1.3-4 nlme_3.1-137 mime_0.6
[79] whisker_0.3-2 xml2_1.2.0 compiler_3.5.2 rstudioapi_0.8 curl_4.0 png_0.1-7
[85] huge_1.2.7 pbivnorm_0.6.0 stringi_1.2.4 highr_0.7 qgraph_1.5 rockchalk_1.8.129
[91] lattice_0.20-38 Matrix_1.2-15 nloptr_1.2.1 pillar_1.3.1 OpenMx_2.11.5 data.table_1.12.2
[97] bitops_1.0-6 corpcor_1.6.9 httpuv_1.4.5 R6_2.4.0 latticeExtra_0.6-28 promises_1.0.1
[103] network_1.13.0.1 gridExtra_2.3 codetools_0.2-15 boot_1.3-20 MASS_7.3-51.1 gtools_3.8.1
[109] assertthat_0.2.1 rjson_0.2.20 withr_2.1.2 mnormt_1.5-5 parallel_3.5.2 hms_0.4.2
[115] grid_3.5.2 rpart_4.1-13 coda_0.19-2 minqa_1.2.4 rmarkdown_1.14 carData_3.0-2
[121] d3Network_0.5.2.1 semTools_0.5-1 shiny_1.2.0 lubridate_1.7.4 base64enc_0.1-3 ellipse_0.4.1
A work by Claudiu Papasteri